package com.chixing.day13_list;

import java.util.HashSet;
import java.util.Iterator;

public class HashSetDemo {
    public static void main(String[] args) {
        HashSet<String> set = new HashSet<>();
        set.add("git");
        set.add("run");
        set.add("maven");
        set.add("hony");
        set.add("git");
        System.out.println(set);
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()){
            String s = iterator.next();
            System.out.println("string迭代器"+s);
        }

        HashSet<Student> setStu = new HashSet<>();
        setStu.add(new Student(21,"smith"));
        setStu.add(new Student(22,"katy"));
        setStu.add(new Student(22,"katy"));
        Iterator<Student> studentIterator = setStu.iterator();
        while (studentIterator.hasNext()){
            Student student = studentIterator.next();
            System.out.println("迭代器Student："+student);
        }

        //new 两次， == false
        //实际我们的业务中，认为 是同一个学生
        /*1.为什么重写equals方法：实际我们的业务，比较两个对象，比较的是内容值，而不是内存地址，所以要重写Object.equals

        2.为什么要重写hashcode方法：

            在容器（集合）中添加大量的元素对象，如果只是与已有元素通过equals方法比较是否存在，随着元素越来越多，
            比较效率会越来越低，O（n）
            所以采用hashcode 方法，是内存地址的换算，直接通过返回的int 值 换算到内存地址，
            再判断该地址上是否有元素，若没有，则添加，若有，再用equals()方法比较，若相等，表示元素已存在，若不等，
            则散列在其他空的内存中，O(1), 大大减少了 equals()方法调用，从而提高了比较效率（添加效率）
        */


    }
}
